package view;

import java.util.Arrays;
import java.util.Comparator;

import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import model.Spieler;

public class SidePanel extends JPanel {
	private Spieler[] spieler;
	private JLabel[] spielerLabels;

	public SidePanel() {
		super();
		setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
		setOpaque(false);
	}
	
	public void setSpieler(Spieler[] spieler) {
		this.spieler = Arrays.copyOf(spieler, spieler.length);
		
		this.removeAll();
		
		this.spielerLabels = new JLabel[spieler.length];
		for (int i = 0; i < spieler.length; i++) {
			JLabel spielerLabel = new JLabel();
			spielerLabel.setBorder(new EmptyBorder(10, 10, 0, 10));
			spielerLabel.setFont(spielerLabel.getFont().deriveFont(20f));
			spielerLabel.setHorizontalAlignment(JLabel.RIGHT);
			this.add(spielerLabel);
			spielerLabels[i] = spielerLabel;
		}
		updatePunkte();
	}
	
	public void updatePunkte() {
		Arrays.sort(this.spieler, new Comparator<Spieler>() {
			public int compare(Spieler o1, Spieler o2) {
				if (o1.getPunkte() < o2.getPunkte())
					return 1;
				if (o1.getPunkte() > o2.getPunkte())
					return -1;
				return o1.getName().compareToIgnoreCase(o2.getName());
			}
		});
		for (int i = 0; i < spieler.length; i++) {
			spielerLabels[i].setText(stringFromSpieler(spieler[i]));
			spielerLabels[i].setForeground(spieler[i].getFarbe());
		}
	}
	
	private String stringFromSpieler(Spieler s) {
		return "<html>"+ s.getName() +": <b>"+ s.getPunkte() +"</b>";
	}
}
